package com.rui.singleton.model;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 当程序中的单例对象非常多的时候，则可以使用容器对所有单例对象进行管理
 */
public class ContainerSingleton {

    private static Map<String, Object> singletonMap = new ConcurrentHashMap<>();

    private ContainerSingleton() {
    }

    public static Object getInstance(Class clazz) throws Exception {
        String className = clazz.getName();
        // 当容器中不存在目标对象时则先生成对象再返回该对象
        if (!singletonMap.containsKey(className)) {
            Object instance = Class.forName(className).newInstance();
            singletonMap.put(className, instance);
            return instance;
        }
        // 否则就直接返回容器里的对象
        return singletonMap.get(className);
    }

}